home *** CD-ROM | disk | FTP | other *** search
/ Quick PC 62 / Quick PC 62.iso / I386 / IIS5_01.CAB / IIS_mkw3site.vbs < prev    next >
Encoding:
Text File  |  1999-03-25  |  8.1 KB  |  260 lines

  1. '------------------------------------------------------------------------------------------------
  2. '
  3. ' This is a simple script to create a new virtual web server.
  4. '
  5. ' Usage: mkw3site <--RootDirectory|-r ROOT DIRECTORY>
  6. '                         <--Comment|-t SERVER COMMENT>
  7. '                         [--computer|-c COMPUTER1[,COMPUTER2...]]
  8. '                         [--HostName|-h HOST NAME]
  9. '                         [--port|-o PORT NUM]
  10. '                         [--IPAddress|-i IP ADDRESS]
  11. '                         [--SiteNumber|-n SITENUMBER]
  12. '                         [--DontStart]
  13. '                         [--verbose|-v]
  14. '                         [--help|-?]
  15. '
  16. ' IP ADDRESS            The IP Address to assign to the new server.  Optional.
  17. ' HOST NAME             The host name of the web site for host headers.
  18. '                        WARNING: Only use Host Name if DNS is set up find the server.
  19. ' PORT NUM              The port to which the server should bind
  20. ' ROOT DIRECTORY        Full path to the root directory for the new server.
  21. ' SERVER COMMENT        The server comment -- this is the name that appers in the MMC.
  22. ' SITENUMBER        The Site Number is the number in the path that the web server
  23. '                        will be created at.  i.e. w3svc/3
  24. '
  25. ' Example 1: mkw3site -r D:\Roots\Company11 --DontStart -t "My Company Site"
  26. ' Example 2: mkw3site -r C:\Inetpub\wwwroot -t Test -o 8080
  27. '------------------------------------------------------------------------------------------------
  28.  
  29.  
  30. ' Force explicit declaration of all variables
  31. Option Explicit
  32.  
  33. On Error Resume Next
  34.  
  35. Dim ArgIPAddress, ArgRootDirectory, ArgServerComment, ArgSkeletalDir, ArgHostName, ArgPort
  36. Dim ArgComputers, ArgStart
  37. Dim ArgSiteNumber
  38. Dim oArgs, ArgNum
  39. Dim verbose
  40.  
  41. ArgIPAddress = ""
  42. ArgHostName = ""
  43. ArgPort = 80
  44. ArgStart = True
  45. ArgComputers = Array(1)
  46. ArgComputers(0) = "LocalHost"
  47. ArgSiteNumber = 0
  48. verbose = false
  49.  
  50. Set oArgs = WScript.Arguments
  51. ArgNum = 0
  52.  
  53. While ArgNum < oArgs.Count
  54.  
  55.     Select Case LCase(oArgs(ArgNum))
  56.         Case "--port","-o":
  57.             ArgNum = ArgNum + 1
  58.             ArgPort = oArgs(ArgNum)    
  59.         Case "--ipaddress","-i":
  60.             ArgNum = ArgNum + 1
  61.             ArgIPAddress = oArgs(ArgNum)
  62.         Case "--rootdirectory","-r": 
  63.             ArgNum = ArgNum + 1
  64.             ArgRootDirectory = oArgs(ArgNum)
  65.         Case "--comment","-t":
  66.             ArgNum = ArgNum + 1
  67.             ArgServerComment = oArgs(ArgNum)
  68.         Case "--hostname","-h":
  69.             ArgNum = ArgNum + 1
  70.             ArgHostName = oArgs(ArgNum)
  71.         Case "--computer","-c":
  72.             ArgNum = ArgNum + 1
  73.             ArgComputers = Split(oArgs(ArgNum), ",", -1)
  74.         Case "--sitenumber","-n":
  75.             ArgNum = ArgNum + 1
  76.             ArgSiteNumber = CLng(oArgs(ArgNum))
  77.         Case "--dontstart":
  78.             ArgStart = False
  79.         Case "--help","-?":
  80.             Call DisplayUsage
  81.         Case "--verbose", "-v":
  82.             verbose = true
  83.         Case Else:
  84.             WScript.Echo "Unknown argument "& oArgs(ArgNum)
  85.             Call DisplayUsage
  86.     End Select    
  87.  
  88.     ArgNum = ArgNum + 1
  89. Wend
  90.  
  91. If (ArgRootDirectory = "") Or (ArgServerComment = "") Then
  92.     if (ArgRootDirectory = "") then
  93.         WScript.Echo "Missing Root Directory"
  94.     else
  95.         WScript.Echo "Missing Server Comment"
  96.     end if
  97.     Call DisplayUsage
  98.     WScript.Quit(1)
  99. End If
  100.  
  101. Call ASTCreateWebSite(ArgIPAddress, ArgRootDirectory, ArgServerComment, ArgHostName, ArgPort, ArgComputers, ArgStart)
  102.  
  103. Sub ASTCreateWebSite(IPAddress, RootDirectory, ServerComment, HostName, PortNum, Computers, Start)
  104.     Dim w3svc, WebServer, NewWebServer, NewDir, Bindings, BindingString, NewBindings, ComputerIndex, Index, SiteObj, bDone
  105.     Dim comp
  106.     On Error Resume Next
  107.  
  108.     For ComputerIndex = 0 To UBound(Computers)
  109.         comp = Computers(ComputerIndex)
  110.         If ComputerIndex <> UBound(Computers) Then
  111.             Trace "Creating web site on " & comp & "."
  112.         End If
  113.  
  114.         ' Grab the web service object
  115.         Err.Clear
  116.         Set w3svc = GetObject("IIS://" & comp & "/w3svc")
  117.         If Err.Number <> 0 Then
  118.             Display "Unable to open: "&"IIS://" & comp & "/w3svc"
  119.         End If
  120.  
  121.         BindingString = IpAddress & ":" & PortNum & ":" & HostName
  122.         Trace "Making sure this web server doesn't conflict with another..."
  123.         For Each WebServer in w3svc
  124.             If WebServer.Class = "IIsWebServer" Then
  125.                 Bindings = WebServer.ServerBindings
  126.                 If BindingString = Bindings(0) Then
  127.                     Trace "The server bindings you specified are duplicated in another virtual web server."
  128.                     WScript.Quit (1)
  129.                 End If
  130.             End If
  131.         Next
  132.  
  133.         Index = 1
  134.         bDone = False
  135.         Trace "Creating new web server..."
  136.  
  137.         ' If the user specified a SiteNumber, then use that.  Otherwise,
  138.         ' test successive numbers under w3svc until an unoccupied slot is found
  139.         If ArgSiteNumber <> 0 Then
  140.             Set NewWebServer = w3svc.Create("IIsWebServer", ArgSiteNumber)
  141.             NewWebServer.SetInfo
  142.             If (Err.Number <> 0) Then
  143.                 WScript.Echo "Couldn't create a web site with the specified number: " & ArgSiteNumber
  144.                 WScript.Quit (1)
  145.             Else
  146.                 Err.Clear
  147.                 ' Verify that the newly created site can be retrieved
  148.                 Set SiteObj = GetObject("IIS://"&comp&"/w3svc/" & ArgSiteNumber)
  149.                 If (Err.Number = 0) Then
  150.                     bDone = True
  151.                     Trace "Web server created. Path is - "&"IIS://"&comp&"/w3svc/" & ArgSiteNumber
  152.                 Else
  153.                     WScript.Echo "Couldn't create a web site with the specified number: " & ArgSiteNumber
  154.                     WScript.Quit (1)
  155.                 End If
  156.             End If
  157.         Else
  158.             While (Not bDone)
  159.                 Err.Clear
  160.                 Set SiteObj = GetObject("IIS://"&comp&"/w3svc/" & Index)
  161.  
  162.                 If (Err.Number = 0) Then
  163.                     ' A web server is already defined at this position so increment
  164.                     Index = Index + 1
  165.                 Else
  166.                     Err.Clear
  167.                     Set NewWebServer = w3svc.Create("IIsWebServer", Index)
  168.                     NewWebServer.SetInfo
  169.                     If (Err.Number <> 0) Then
  170.                         ' If call to Create failed then try the next number
  171.                         Index = Index + 1
  172.                     Else
  173.                         Err.Clear
  174.                         ' Verify that the newly created site can be retrieved
  175.                         Set SiteObj = GetObject("IIS://"&comp&"/w3svc/" & Index)
  176.                         If (Err.Number = 0) Then
  177.                             bDone = True
  178.                             Trace "Web server created. Path is - "&"IIS://"&comp&"/w3svc/" & Index
  179.                         Else
  180.                             Index = Index + 1
  181.                         End If
  182.                     End If
  183.                 End If
  184.  
  185.                 ' sanity check
  186.                 If (Index > 10000) Then
  187.                     Trace "Seem to be unable to create new web server.  Server number is "&Index&"."
  188.                     WScript.Quit (1)
  189.                 End If
  190.             Wend
  191.         End If
  192.         NewBindings = Array(0)
  193.         NewBindings(0) = BindingString
  194.         NewWebServer.ServerBindings = NewBindings
  195.         NewWebServer.ServerComment = ServerComment
  196.         NewWebServer.SetInfo
  197.  
  198.         ' Now create the root directory object.
  199.         Trace "Setting the home directory..."
  200.         Set NewDir = NewWebServer.Create("IIsWebVirtualDir", "ROOT")
  201.         NewDir.Path = RootDirectory
  202.         NewDir.AccessRead = true
  203.         Err.Clear
  204.         NewDir.SetInfo
  205.         NewDir.AppCreate (True)
  206.  
  207.         If (Err.Number = 0) Then
  208.             Trace "Home directory set."
  209.         Else
  210.             Display "Error setting home directory."
  211.         End If
  212.  
  213.         Trace "Web site created!"
  214.  
  215.         If Start = True Then
  216.             Trace "Attempting to start new web server..."
  217.             Err.Clear
  218.             Set NewWebServer = GetObject("IIS://" & comp & "/w3svc/" & Index)
  219.             NewWebServer.Start
  220.             If Err.Number <> 0 Then
  221.                 Display "Error starting web server!"
  222.                 Err.Clear
  223.             Else
  224.                 Trace "Web server started succesfully!"
  225.             End If
  226.         End If
  227.     Next
  228. End Sub
  229.  
  230.  
  231. ' Display the usage message
  232. Sub DisplayUsage
  233.     WScript.Echo "Usage: mkw3site <--RootDirectory|-r ROOT DIRECTORY>"
  234.     WScript.Echo "                <--Comment|-t SERVER COMMENT>"
  235.     WScript.Echo "                [--computer|-c COMPUTER1[,COMPUTER2...]]"
  236.     WScript.Echo "                [--port|-o PORT NUM]"
  237.     WScript.Echo "                [--IPAddress|-i IP ADDRESS]"
  238.     WScript.Echo "                [--HostName|-h HOST NAME]"
  239.     WScript.Echo "                [--SiteNumber|-n SITENUMBER]"
  240.     WScript.Echo "                [--DontStart]"
  241.     WScript.Echo "                [--verbose|-v]"
  242.     WScript.Echo "                [--help|-?]"
  243.     WScript.Echo "WARNING: Only use Host Name if DNS is set up find the server."
  244.     WScript.Echo ""
  245.     WScript.Echo "Example 1: mkw3site -r D:\Roots\Company11 --DontStart -t ""My Company Site"""
  246.     WScript.Echo ""
  247.  
  248.     WScript.Quit (1)
  249. End Sub
  250.  
  251. Sub Display(Msg)
  252.     WScript.Echo Now & ". Error Code: " & Hex(Err) & " - " & Msg
  253. End Sub
  254.  
  255. Sub Trace(Msg)
  256.     if verbose = true then
  257.         WScript.Echo Now & " : " & Msg    
  258.     end if
  259. End Sub
  260.